component implements="com.firemoss.atonement.mapper.resolution.IValueResolver"
{
	public function resolve(source, targetProperty, mapping, mappingChain)
	{
			if ( isNull( source ) )
			{
				return javacast( "null", "" );
			}
			else if ( not mappingChain.containsKey( source ) )
			{
				var result = mapping.getMapper().getGraphedInstanceFactory().createByTargetProperty( source, targetProperty );
					
				writeLog( "mapping resolved value");
				mapping.getMapper().map( source, result, mappingChain );
					
				mappingChain.put( source , result );
				
				return result;
			}
			else
			{
				return mappingChain[ source ];
			}
		}
}